// 对外开放的api，用于获取和控制页面信息
// import store from '@/store'
// console.log('store', store._state.data)
// const storeState = store._state.data
// const globalList = {
//   time: new Date() // 全局时间
// }
// let ScrollTimer = null; // 滚动定时器
// 事件队列，事件对象，事件名：[{监听该事件的dom，回调方法}]
if (!window.zl_event_object) {
  window.zl_event_object = {}
}

const yun_api = {
  // 设置页面竖向滚动条位置
  /**
   * @param {Number} position 滚动位置，历时1s
   */
  // setScrollPoistion: function(position) {
  //   if (storeState.status === 'dev') {
  //     let container = document.querySelector('.component-fr.show-component')
  //     let height = container.scrollTop
  //     let time = 16.7;
  //     let slice = height / 30
  //     if (ScrollTimer) {
  //       return
  //     }
  //     ScrollTimer = setInterval(() => {
  //       height = (height - slice) >= 0 ? height - slice : 0
  //       container.scrollTop = height;
  //       if (height <= 0) {
  //         clearInterval(ScrollTimer)
  //         ScrollTimer = null
  //       }
  //     }, time)
  //   } else if (storeState.status === 'prod') {
  //     let container = document.querySelector('body')
  //     let height = container.scrollTop
  //     let time = 16.7;
  //     let slice = height / 30
  //     if (ScrollTimer) {
  //       return
  //     }
  //     ScrollTimer = setInterval(() => {
  //       height = (height - slice) >= 0 ? height - slice : 0
  //       container.scrollTop = height;
  //       if (height <= 0) {
  //         clearInterval(ScrollTimer)
  //         ScrollTimer = null
  //       }
  //     }, time)
  //   }
  // },
  // // 获取页面竖向滚动条位置
  // getScrollPoistion: function() {
  //   if (storeState.status === 'dev') {
  //     let container = document.querySelector('.component-fr.show-component')
  //     return container.scrollTop
  //   } else {
  //     let container = document.querySelector('body')
  //     return container.scrollTop
  //   }
  // },
  // 监听事件
  /**
   * @param {String} name = [事件名]
   * @param {Dom} dom = [监听事件的dom]
   * @param {Function} callback = [回调函数]
   */
  zl_on_event: function(name, dom, callback) {
    dom.addEventListener(name, callback)
  },
  // 解除事件
  /**
   * @param {String} name = [事件名]
   * @param {Dom} dom = [dom姐弟啊]
   * @param {Function} callback = [回调函数]
   */
  zl_offEvent: function(name, dom, callback) {
    if (!Object.prototype.hasOwnProperty.call(window.zl_event_object, name)) {
      return
    }
    for (let i = 0; i < window.zl_event_object[name].length; i++) {
      if (window.zl_event_object[name][i].target === dom && window.zl_event_object[name][i].func === callback) {
        window.zl_event_object[name].splice(i, 1)
        break;
      }
    }
  },
  // 触发事件
  /**
   * @param {String} name = [事件名]
   * @param {String | Number | Object | Array | Boolean} val = [值]
   */
  zl_emit: function(name, dom, val) {
    if (!Object.prototype.hasOwnProperty.call(window.zl_event_object, name)) {
      return
    }
    // 循环事件对象，遍历事件
    for (let key in window.zl_event_object) {
      if (window.zl_event_object[name]) {
        window.zl_event_object[name].map(item => {
          // 监听了该事件的对象触发
          if (item.target === dom) {
            item.func(val)
          }
        })
      }
    }
  },
  // 获取全局对象副本
  zl_getSystemGlobalValu: function() {
    return JSON.parse(JSON.stringify(globalList))
  },
  // 获取对象的某个属性,如果是undefined则返回默认值
  /**
   * @param {String} name = [事件名]
   * @param {String} name = [事件名]
   * @param {String} name = [事件名]
   * @return 返回属性值
   */
  zl_getAttr: function(data, name, value = '') {
      return Object.prototype.hasOwnProperty.call(data, name) ? data[name].value : value
  },
  // 触发
  zl_emit_event: function(name, dom, val) {
    let event = new CustomEvent(name, {
      "detail": val,
      "bubbles": true,//是否冒泡    回调函数中调用，e.stopPropagation();可以阻止冒泡
      "cancelable": false,//是否可以取消  为true时，event.preventDefault();才可以阻止默认动作行为
    });
    // 触发
    console.log('触发事件', name)
    dom.dispatchEvent(event)
  },
  /**
   * @param {Object} item = [待查找对象]
   * @param {string} key = [待查找的属性的键名]  
   */
  getItemAttrVal(item, key) {
  	  if (item.attribute[key]) {
  		  if (item.attribute[key]['value']) {
  			  return item.attribute[key]['value']
  		  }
  	  }
  	  return undefined
  }
}

export default yun_api
